﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using condortravel.operaciones.business.operaciones;

using System.Collections.Generic;
using condortravel.operaciones.core.DataModel;
using CondorTravelOperacionesWeb.Source;
using condortravel.operaciones.common.Log;
using condortravel.operaciones.error.Operaciones;
using condortravel.operaciones.common;
using condortravel.operaciones.entities.Entities;
namespace CondorTravelOperacionesWeb.Pages.Controles
{
    public partial class UCSeguimientoOperaciones : ControlBase
    {

        #region Eventos Implementation
        public override event ControlBase.EventOnErrorControl ErrorControl;
        public override event ControlBase.EventOnMessageControl MessageControl;

        public delegate void EventSelectItinerario_Click(object sender, GridViewCommandEventArgs e);
        public virtual event EventSelectItinerario_Click SelectItinerario_Click;

        #endregion

        #region Business Objects
        private OperacionesServices operacionesServices;

        public OperacionesServices OperacionesServices
        {
            set { operacionesServices = value; }
        }
        #endregion

        #region Page Load Event
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                cargaDatosIniciales();
                cargarItinerarioAgente();
            }
        }

        protected void btnSearch_Click(object sender, EventArgs e)
        {

        }

        protected void gvList_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {

        }

        protected void gvList_OnRowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "VerProgramacion")
            {
                SelectItinerario_Click(sender, e);
            }

        }
        /// <summary>
        /// Por cada fila entra a este metodo
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void gvList_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                Tb_ItinerarioViajero itinerario = (Tb_ItinerarioViajero)e.Row.DataItem;
                Label lblAgente = (Label)e.Row.FindControl("lblAgente");
                Label lblCliente = (Label)e.Row.FindControl("lblCliente");
                Label lblPaqTuristico = (Label)e.Row.FindControl("lblPaqTuristico");
                Label lblEstado = (Label)e.Row.FindControl("lblEstado");
                lblEstado.Text = (itinerario.Tb_Estado_Itinerario != null) ? itinerario.Tb_Estado_Itinerario.descripcion : " - ";
                lblAgente.Text = (itinerario.Tb_Agente != null) ? itinerario.Tb_Agente.nombre : " - ";
                lblCliente.Text = (itinerario.Tb_Cliente != null) ? itinerario.Tb_Cliente.nombre + " " + itinerario.Tb_Cliente.apellido : " - ";
                lblPaqTuristico.Text = (itinerario.Tb_PaqueteTuristico != null) ? itinerario.Tb_PaqueteTuristico.descripcion : " - ";

            }
        }

        #endregion

        #region Controls Events
        protected void Buscar_Click(object sender, EventArgs e)
        {
            buscarItinerios();

        }
        #endregion

        #region private methods

        private void cargaDatosIniciales()
        {
            Util.LoadDropDownList(cboAgencia, Estaticas.getListAgencia(), "descripcion", "Agencia_ID", true, "0", "-");
            Util.LoadDropDownList(cboAgente, Estaticas.getListAgente(), "nombre", "Agente_ID", true, "0", "-");
            Util.LoadDropDownList(cboPaqueteTuristico, Estaticas.getListPaqueteTuristico(), "descripcion", "PaqueteTuristico_ID", true, "0", "-");
            Util.LoadDropDownList(cboEstadoItinerario, Estaticas.getListEstadoItinerario(), "descripcion", "estadoItinerario_ID", true, "0", "-");
            //Carga datos x defecto
            if (this.User != null)
                Util.SelectItemDropDownList(cboAgente, this.User.UserID.ToString());

            //Seleccionar el estado x defecto
            Util.SelectItemDropDownList(cboEstadoItinerario, AppStatic.VAR_OPE_ESTADO_EJECUCION.ToString());

            //Para validar el ingreso de algun criterio
            cmdBuscar.Attributes.Add("onclick", String.Format("if(!FF_checkFieldsEmpty()) return false;"));

            //Seleccionar un criterio de busqueda
            txtFechaInicio.Text = DateTime.Now.ToShortDateString();
            txtFechaTermino.Text = DateTime.Now.ToShortDateString();

        }



        /// <summary>
        /// Obtiene la lista de itinerarios del agente logueado y que estan en estado
        /// pendientes
        /// </summary>
        private void cargarItinerarioAgente()
        {
            try
            {
                FilterItinerarioCriteria filter = new FilterItinerarioCriteria();
                filter.Estado = AppStatic.VAR_OPE_ESTADO_EJECUCION; //En ejecución
                filter.Agente = this.User.UserID;
                List<Tb_ItinerarioViajero> lista = operacionesServices.getListItinerarioByAgente(filter);
                if (lista.Count == 0)
                    throw new OperacionesException.NoExisteItinerariosOPException();
                gvList.DataSource = lista;
                gvList.DataBind();
            }
            catch (Exception exc1)
            {
                this.ErrorControl(null, exc1);
                LogApp.WriteLog(ELogLevel.ERROR, string.Format("{0}-{1}", exc1.Message, exc1.StackTrace));
            }

        }

        /// <summary>
        /// Obtiene la lista de itinerarios segun el criterio ingresado
        /// </summary>
        private void buscarItinerios()
        {
            try
            {
                FilterItinerarioCriteria filter = obtenerCriterios();
                List<Tb_ItinerarioViajero> lista = operacionesServices.getListItinerarioByCriteria(filter);
                gvList.DataSource = lista;
                gvList.DataBind();
                if (lista.Count == 0)
                    throw new OperacionesException.NoExisteItinerariosOPException();
            }
            catch (Exception exc1)
            {
                this.ErrorControl(null, exc1);
                LogApp.WriteLog(ELogLevel.ERROR, string.Format("{0}-{1}", exc1.Message, exc1.StackTrace));
            }

        }

        /// <summary>
        /// Obtener la lista de los criterios
        /// </summary>
        /// <returns></returns>
        private FilterItinerarioCriteria obtenerCriterios()
        {
            FilterItinerarioCriteria criterios = new FilterItinerarioCriteria();
            criterios.Agencia = (cboAgencia.SelectedIndex == 0 ? 0 : int.Parse(cboAgencia.SelectedValue));
            criterios.Agente = (cboAgente.SelectedIndex == 0 ? 0 : int.Parse(cboAgente.SelectedValue));
            criterios.Apellidos = txtApellidos.Text.Trim();
            criterios.Nombre = txtNombre.Text.Trim();
            criterios.Dni = txtDNI.Text.Trim();
            criterios.Estado = (cboEstadoItinerario.SelectedIndex == -1 ? 0 : int.Parse(cboEstadoItinerario.SelectedValue));
            criterios.FecFin = (txtFechaTermino.Text.Trim().Equals(String.Empty) ? DateTime.MinValue : DateTime.Parse(txtFechaTermino.Text));
            criterios.FecInicio = (txtFechaInicio.Text.Trim().Equals(String.Empty) ? DateTime.MinValue : DateTime.Parse(txtFechaInicio.Text));
            criterios.Itinerario = (txtCodigo.Text.Trim().Equals(String.Empty) ? 0 : int.Parse(txtCodigo.Text));
            //criterios.Nombre
            criterios.Paquete = (cboPaqueteTuristico.SelectedIndex == -1 ? 0 : int.Parse(cboPaqueteTuristico.SelectedValue));
            return criterios;
        }

        #endregion
    }
}